# Author:ZengQiaoyi
# week_05学习笔记
# 一、数据结构之列表
# 用户输入方法：input()
# 回顾上节内容：登录系统（while循环、input输入）
# 本节教学：打印（print）输出的一般方法

#name = input("names: ")
#age = input("age: ")
#job = input("job: ")
#salary = input("salary: ")

# 注释来写内容存到字符串中
# 知识点1：字符串拼接 用+ 让打印的结果更直观。

#name: '''+name+'''
#age: '''+age+'''
#job:'''+job+'''
#salary: '''+salar+'''

#print(info)

# 知识点2：%s占位符，可以把+符号省略，比较直观的展示变量内容。 （缺点：如果变量很多，就比较麻烦。）

#info = '''------INFO %s ------
#name:%s
#age:%s
#job:%s
#salary:%s '''%(name,name,age,job,salary)

#print(info)

# 知识点3：.format() 比起%s 更适合较多的变量的打印，不需要考量顺序和出现次数
# 例如 ：url 的拼接（https:// + 域名 + endpoint）
#info1 = '''------INFO {HTML_name} ------
#name:{HTML_name}
#age:{HTML_age}
#job:{HTML_job}
#salary:{HTML_salary}'''.format(HTML_name=name,HTML_age=age,HTML_job=job,HTML_salary=salary)

#print(info1)

# 假定你要求用户以2021-10-27格式输入
user_input_time = "2021-10-27"
# 字符串拆分，方法split 拆分完的结果是一个 列表
print(user_input_time.split('-'))
print(user_input_time.split('-'))

# 二、列表（list）
# 列表是处理一组有序项目的数据结构，即你可以在一个列表中存储一个序列的项目。
# 列表中的项目应该包括在方括号[ ]中，这样Python就知道你是指明一个列表。一旦你创建了一个列表，就可以添加、删除，或者是搜索列表中的项目。
# 由于你可以增加或者删除项目，我们说列表是可变的数据类型，即这种类型是可以被改变的，且列表是可以嵌套的。
# 知识点1：按字面创建列表
# 1.尝试创造一个“空列表”
prices = [] # 变量名在赋值操作符左边，“字面列表”在右边，在这里，这个列表为空

# 2.尝试创建一个“浮点数列表”
temps = [32.0,212.0,0.0,81.6,100.0,45.3] #对象（浮点数）用逗号分隔开，而且用中括号包围，所以这是一个列表

# 3.编程中最著名的“单词列表”
words = ['hello','world'] # 一个字符串对象列表

# 在运行时“扩展”列表
found = []# (一个空列表)
len(found)# 其中没有任何对象，利用“len”内置函数会报告一个对象的大小。
# 运用内置方法处理列表的对象
found.append('a')# 使用"append"方法在运行时将对象增加到没有列表
len(found)# (此时列表的长度会增加# )

#names = "xiaoming,xiaohong,xiaoyao"
#print(names[1])

# 知识点2：用户数据列表创建
users_list = ["xiaoming","xiaohong","xiaoyao"]
password_list = [123456,654321,345678]
age_list = [18,19,20]

# 列表的嵌套
info_list = [["xiaoming",123456,18],["xiaohong",654321,19],["xiaoyao",345678,20]]

print(users_list[0])
print(password_list[0]
print(age_list[0])
print(info_list[-1])

# -3,-2,-1,0,1,2,
names = ["Mike","Mary","Jan","Jack"]
# 知识点3：slices(切片) 数值是指 values在list中的位置
# 1.正向取值
# list 取值”：“右边的值取不到 例如[1:3] 3这个位置取不到
print(names[1:3])
print(names[0:2])
# 如果 左侧的值是0 即从0开始取值，0可以省略不写
print(names[:2])

# 2.反向取值
# list取值”：“右边的值取不到 例如[-3:-1] -1这个位置取不到
# 注意: 取到最后一个值，不能写0 省略不写即可
print(names[-3:-1])

num = [1,2,3,4,5,6,7,8,9]
# 对比range
print(list(range(10)))

print(num[:6:2])

num = list(range(10))
print(num.)

# 补充：
# 1.列表可以存储不同的数据类型
li = [1,1.2,'hello',True]

# 2.列表的特性
# 定义一个列表：
service = ['http','ssh','ftp','dns']
# （1）索引
print(service[0])  ##索引列表的第一个元素
print(service[-1]) ##索引列表中的最后一个元素
# （2）切片
print(service[1:])  ##输出列表中除了第一个元素的值
print(service[:-1]) ##输出列表中除了最后一个元素的值
print(service[::-1]) ##将列表的成员倒序输出
#（3）重复
print(service * 3)  ##将列表里的所有成员输出三次
#（4）连接
service = ['mysql','firewalld']
print(service + service1)
#（5）成员操作符
print('mysql' in service1)
print('mysql' not in serviceq)  ##返回一个布尔值：Ture/False
#（6）迭代
#for se in service
#print(se)

# 3.添加列表元素
service = ['http','ssh','ftp','dns']
# （1）append:追加一个元素到列表中
service.append('firewalld')
# （2）extend:拉伸 追加多个元素到列表中
service.extend(['mysql','firewalld'])
# （3）insert:在指定索引位置插入元素
service.insert(1,'samba')